package ru.pb.game.network.engine.client.packets.receivable;

import ru.pb.game.network.engine.client.packets.FromClientToGameServerPacket;
import ru.pb.game.network.engine.client.packets.sendable.PROTOCOL_BATTLE_STARTBATTLE_ACK;
import ru.pb.game.network.engine.client.packets.sendable.opcode_3865_ACK;
import ru.pb.game.network.engine.client.packets.sendable.opcode_3867_ACK;
import ru.pb.game.network.engine.client.packets.sendable.opcode_3890_ACK;
import ru.pb.game.network.threading.ThreadPoolManager;
import ru.pb.game.objects.model.players.Player;
import ru.pb.game.objects.model.players.enums.SLOT_STATE;
import ru.pb.game.objects.model.room.Room;
import ru.pb.game.objects.storage.ObjectsStorage;
import ru.pb.global.threading.RunnableTask;

public class PROTOCOL_BATTLE_STARTBATTLE_REQ extends FromClientToGameServerPacket
{
	private int _frost, _unk;

	public PROTOCOL_BATTLE_STARTBATTLE_REQ()
	{}

	@Override
	public void readImpl()
	{
		_frost = readH();

		if(_buf.remaining() > 0) // Хз иногда чото ругается что нехватает байтов
			_unk = readD(); // тут 0 поч-то.

		// _log.info("frost:" + _frost);
		// _log.info("UNK: " + _unk);

	}

	@Override
	public void runImpl()
	{
		_log.info("============= STARTBATTLE REQ ===============");
		final Player p = getPlayer();
		final Room r = p.getRoom();
		if(p != null && r != null)
		{

			ThreadPoolManager.getInstance().schedule(new RunnableTask()
			{
				@Override
				public void runImpl() throws Exception
				{
					p.sendPacket(new opcode_3890_ACK(r));
					r.changeSlotState(p.getSlot(), SLOT_STATE.SLOT_STATE_BATTLE);
					r.updateInfo();
					Player member = null;
					for(int objId : r.getAllPlayers().toArray())
					{
						member = ObjectsStorage.getInstance().getPlayer(objId);
						p.sendPacket(new PROTOCOL_BATTLE_STARTBATTLE_ACK(member)); // FIXME Разобраться, Кому и кто посылает, реквест же у всех будет или тока у хоста??
					}
					p.sendPacket(new opcode_3865_ACK());
					p.sendPacket(new opcode_3867_ACK(p.getRoom()));
					// _p.sendPacket(new opcode_3893_ACK(0x01));
					// _p.sendPacket(new opcode_3893_ACK(0x03));
					// _p.sendPacket(new opcode_3893_ACK(0x05));
					// _p.sendPacket(new opcode_3893_ACK(0x07));
					// _p.sendPacket(new opcode_3893_ACK(0x09));
					// _p.sendPacket(new opcode_3893_ACK(0x0b));
					// _p.sendPacket(new opcode_3893_ACK(0x0d));
					// _p.sendPacket(new opcode_3893_ACK(0x0f));
				}
			}, 5000);
		}
	}
}